I love computers, and especially computer systems. I’m interested in how different pieces of hardware and software, like processors, operating systems, compilers, and linkers, work together to get things done. Early in my career, as a software security tester, I studied how different components interacted to find vulnerabilities. Now that I work on compilers, I focus on the systems that transform source code into a running program. I’m also interested in how computer systems are shaped by the people who build and use them—I believe that creating safer, more reliable software is a social problem as much as a technical one.
I wrote
Writing a C Compiler: Build a Real Programming Language from Scratch
Before I read this book, I knew a bunch of facts about the different pieces of computer systems. After I read it, I understood how those pieces fit together. Building all those pieces myself, starting from the simplest logic gates and working my way up, made some fundamental concepts finally click—like how a processor decodes an instruction.
I especially loved the book’s hands-on structure: each chapter is a project where you get a specification and test suite for the component you need to build, but you have to figure out exactly how to build it for yourself. Completing the projects often felt like solving a fun puzzle, and it made the concepts stick in a way that just reading about them wouldn’t have.
A textbook with a hands-on approach that leads students through the gradual construction of a complete and working computer system including the hardware platform and the software hierarchy.
In the early days of computer science, the interactions of hardware, software, compilers, and operating system were simple enough to allow students to see an overall picture of how computers worked. With the increasing complexity of computer technology and the resulting specialization of knowledge, such clarity is often lost. Unlike other texts that cover only one aspect of the field, The Elements of Computing Systems gives students an integrated and rigorous picture…
One of the best ways to understand how software works is to study how it fails. When I was just starting my career in software security, I read this book to learn about binary exploits like buffer overflows. It’s been a long time since I’ve written a binary exploit, but digging into the nitty-gritty, low-level details of how software runs on a real system has helped with everything I’ve done as an engineer since.
A lot has changed since this book was published in 2008 (and running the accompanying Live CD has gotten trickier), but the fundamental concepts are as relevant as ever.
Hacking is the art of creative problem solving, whether that means finding an unconventional solution to a difficult problem or exploiting holes in sloppy programming. Many people call themselves hackers, but few have the strong technical foundation needed to really push the envelope. Rather than merely showing how to run existing exploits, author Jon Erickson explains how arcane hacking techniques actually work. To share the art and science of hacking in a way that is accessible to everyone, Hacking: The Art of Exploitation, 2nd Edition introduces the fundamentals of C programming from a hacker's perspective. The included LiveCD provides a…
Known more for his books on Mayas, Aztecs, and Spanish conquistadors, historian Matthew Restall's latest book takes his deepest dive yet into the history of pop music.
In the late-1970s, three music-obsessed, suburban London teenagers set out to make their own kind of pop music: after years of struggle, success…
This isn’t a technical book, but it gets to the heart of why so much software is fragile and insecure. This book examines spectacular failures of all sorts, from nuclear meltdowns to plane crashes to oil spills, but I loved it because its message resonated with my own experience writing and debugging code. It argues that complex, tightly coupled systems involving hidden interactions and close coordination between lots of different parts are more likely to fail catastrophically. It also talks about strategies to make those systems safer, like doing “premortems,” getting advice from outsiders, and building diverse teams.
My big takeaway? Technical solutions alone won’t make software (or other complex systems) safer. We need to change how we build and how our organizations work, too.
A groundbreaking take on how complexity causes failure in all kinds of modern systems—from social media to air travel—this practical and entertaining book reveals how we can prevent meltdowns in business and life.
A crash on the Washington, D.C. metro system. An accidental overdose in a state-of-the-art hospital. An overcooked holiday meal. At first glance, these disasters seem to have little in common. But surprising new research shows that all these events—and the myriad failures that dominate headlines every day—share similar causes. By understanding what lies behind these failures, we can design better systems, make our teams more productive, and…
Although I don’t work in government, this is a book I’ll come back to whenever I need a reminder to put user needs ahead of process or wisdom about how to work inside a large bureaucracy to make that happen. Where Meltdown focuses on spectacular blow-ups, this book explores run-of-the-mill failures—like long, complicated online forms and websites that only load in specific, outdated browsers. (Though bigger failures, like the launch of healthcare.gov, get airtime too.)
I appreciated this book’s thoughtful analysis of how government software gets built—it goes beyond the stereotype of the incompetent government employee and digs into the underlying reasons that even competent and dedicated public servants can struggle to deliver critical software. Many of those reasons apply to private companies, too.
Learn more about Jennifer Pahlka's work at recodingamerica.us.
"The book I wish every policymaker would read." -Ezra Klein, The New York Times
A bold call to reexamine how our government operates-and sometimes fails to-from President Obama's former deputy chief technology officer and the founder of Code for America
Just when we most need our government to work-to decarbonize our infrastructure and economy, to help the vulnerable through a pandemic, to defend ourselves against global threats-it is faltering. Government at all levels has limped into the digital age, offering online services that can feel even more cumbersome than the paperwork that…
This book is a collection of essays on Asian affairs written over the author's half century career as a Professor of Chinese at New York University. The author's point of view is critical of Washington's policies in Asia as a modernized continuation of European and especially Japanese colonialism and imperialism,…
This book gave me a new framework for thinking about how political change happens and how technology shapes our society. It analyzes how social media platforms like Facebook have helped antiauthoritarian movements achieve dazzling success almost overnight—and how those platforms have weakened and endangered those same movements. I loved that this book was clear and readable without oversimplifying the topic. It showed—as Tufecki writes, quoting another scholar—that “technology is neither good nor bad; nor is it neutral.”
This isn’t exactly a book about computer systems, but I decided to include it because it gave me a deeper understanding of how technological and social systems influence each other—which I hope will change how I write software myself.
From New York Times opinion columnist Zeynep Tufekci, an firsthand account and incisive analysis of the role of social media in modern protest
"[Tufekci's] personal experience in the squares and streets, melded with her scholarly insights on technology and communication platforms, makes [this] such an unusual and illuminating work."-Carlos Lozada, Washington Post
"Twitter and Tear Gas is packed with evidence on how social media has changed social movements, based on rigorous research and placed in historical context."-Hannah Kuchler, Financial Times
To understand a thwarted Turkish coup, an anti-Wall Street encampment, and a packed Tahrir Square, we must first comprehend the…
Compilers are at the heart of everything programmers do, but even experienced developers find them intimidating. My book is a fun, hands-on introduction to this fascinating topic. It guides you through a project where you’ll build your own compiler for a significant subset of C, targeting real x86-64 assembly code.
You’ll first build a working compiler for the simplest C program, then add new features chapter by chapter. The algorithms in the book are all in pseudocode, so you can implement your compiler in whatever language you like. Along the way, you’ll learn about fundamental topics like abstract syntax trees, recursive descent parsing, and register allocation. The book’s test suite is available on GitHub to help you stay on track.
"I've poured through quite a few books about brands and this one definitely stood out. I viewed it as a business plan for one's brand. Pete does a nice job of breaking down the components that qualify a brand as having significance in the marketplace. An excellent read. Definitely worth…
Anatomy of Embodied Education
by
E. Timothy Burns,
The vast mysterious terrain explored in this book encompasses the embodied human brain, the processes through which humans grow, develop, and learn, and the mystery of consciousness itself. We authors offer this guidebook to assist you in entering and exploring that terrain.